Одна из самых больших проблем современных архитектур кроется в увеличении производительности однопоточных вычислений. Intel за последние годы продвигалась в этом направлении маленькими шажками, AMD с новой архитектурой Zen планирует сделать серьезный рывок вперед, по крайней мере, обогнав Intel. Внимание разработчиков CPU уделялось не столько однопоточной производительности, сколько увеличению параллельной обработки и числа ядер, но она все равно важна для многих приложений.
Компания Soft Machines из США несколько лет специализировалась на разработке новой архитектуры CPU, апробируя различные теоретические подходы. Теперь компания представляет первую практическую реализацию, которая доступна для лицензирования партнерам и может быть представлена в готовых решениях. Ниже мы более подробно ее рассмотрим, а также поговорим о проблемах, которые пришлось преодолевать Soft Machines.
Для повышения производительности процессоров доступны разные подходы. Самый очевидный – увеличение тактовой частоты. Но здесь перспектив пока не видно, частота современных CPU достигла 4-5 ГГц, а тепловой пакет 125 Вт. Поэтому необходимо совершенствовать архитектуру. Увеличение количества ядер обеспечивает рост параллелизма на уровне потоков (TLP). Можно улучшать параллелизм на уровне инструкций (ILP), что дает ускорение вычислений, улучшать предсказание ветвлений, что снижает задержки.
Все эти факторы сегодня находятся в фокусе внимания разработчиков CPU, в будущем они продолжат играть важную роль. Некоторые задачи, подобные графике, параллельны по своей природе, они выигрывают от сотен или тысяч ядер. Можно заняться и оптимизацией программного обеспечения. Но природа большинства кода и программ по своей природе однопоточная, их производительность зависит от того, насколько быстро инструкции будут обрабатываться в одном потоке.
Для повышения однопоточной производительности разработчики новых архитектур увеличивают IPC или число инструкций, обрабатываемых за такт. Например, в 3-wide конвейере с внеочередным выполнением обрабатываются три инструкции за такт, в 5-wide конвейере уже одновременно выполняется пять инструкций, что теоретически может увеличить производительность на 66 процентов. Но все не так просто, поскольку код или операции не всегда получается распределить так, чтобы они выполнялись параллельно. Поэтому всегда добавляются периоды бездействия, конвейер никогда не заполняется на 100% и не работает с идеальной эффективностью.
В любом случае, чем «шире» архитектура, то есть чем больше инструкций она может выполнять за такт, тем лучше – по крайней мере, на первый взгляд. Поскольку для широкой архитектуры требуется и более мощная инфраструктура. Сюда входят буферы, кэш-память и другие компоненты. Все это увеличивает сложность дизайна и площадь чипа. Так что производителям следует решить, соответствует ли выбранная глубина планируемому бюджету площади чипа и энергопотреблению. Intel для архитектуры Skylake выбрала 6-wide архитектуру с внеочередным выполнением. NVIDIA для ядер Denver ARM выбрала 7-wide. Но потенциальный недостаток широких архитектур кроется в недостаточной эффективности для наборов инструкций, которым требуется только 2-wide или 3-wide архитектура. Так что здесь необходимо искать оптимальный компромисс.
Здесь стоит отметить две философии дизайна CPU. Первая опирается на сложные инструкции – CISC (Complex Instruction Set Computer), вторая – на простые инструкции RISC (Reduced Instruction Set Computer). Процессоры x86 относятся к CISC, но Intel разработала своего рода промежуточное решение, которое компания назвала CRISC. Здесь подразумевается и реализация SMT (simultaneous multithreading), позволяющая выполнять два потока на одном физическом ядре.
Архитектура VISC
Soft Machines предложила свою архитектуру VISC, заключающуюся в распределении инструкций в одном потоке на несколько физических ядер. На первый взгляд звучит просто, но на практике приходится решать немало проблем.
На иллюстрации показан пример реализации на четырех физических ядрах. Такой дизайн дает четыре виртуальных ядра, которые могут обрабатывать четыре потока. Но суть архитектуры VISC заключается в том, что когда виртуальное ядро получает поток с инструкциями, оно может задействовать ресурсы любого физического ядра. В результате если каждое физическое ядро имеет 4-wide дизайн с внеочередным выполнением, поток может задействовать ресурсы всех четырех ядер, что дает очень широкий 16-wide дизайн (4 физических ядра x 4-wide).
Все архитектуры CPU, будь то x86, ARMv8, Power или SPARC, опираются на собственный набор инструкций ISA (instruction set architectures). Поэтому процессор работает с предварительно определенным набором инструкций, то же самое касается и VISC. На фронтальном интерфейсе инструкции VISC распределяются по виртуальным потокам (virtual hardware threadlets), после чего передаются на отдельные виртуальные ядра. А виртуальные ядра уже затем будут самостоятельно искать свободные ресурсы на любых физических ядрах для выполнения. Несколько виртуальных ядер могут использовать одно физическое ядро, например.
Проблема кроется в поиске и выделении свободных ресурсов, и именно здесь VISC готова обойти популярные дизайны CPU. Если одновременно работает несколько виртуальных ядер, выделение ресурсов выполняется динамически с задержкой порядка считанных тактов (Soft Machines говорит о 1-4 тактах). Популярные дизайны опираются на предсказания, которые срабатывают или нет. В случае VISC используется два подхода. Виртуальные потоки threadlets создаются так, чтобы минимизировать коммуникации между ядрами, так как они увеличивают задержки и снижают производительность. Второе: ядра могут обмениваться данными через регистры или кэш L1. Для регистров задержка составляет один такт, но здесь можно обмениваться десятками значений. Для кэша L1 задержка уже четыре такта, но обмениваться можно сотнями значений.
Почему же Intel, ARM и другие разработчики CPU не выбрали схожий подход? Ответ кроется в сложности координации обмена данными между несколькими физическими ядрами. Данные должны быть всегда актуальными, что требует дополнительных усилий по координации. Soft Machines интенсивно работала как раз в этом направлении, улучшая управление данными и эффективность предсказаний. Но по предсказанию ветвлений Soft Machines все равно отстает от Intel на много лет, последняя дает на 20-30% лучшую производительность. Зато в случае ошибочного предсказания штраф VISC составляет всего несколько тактов. Здесь разработчики VISC продолжают совершенствовать свою архитектуру.
Shasta - 2 ядра, 2 виртуальных ядра
Первой реализацией архитектуры VISC стала Shasta. Она относится к интеллектуальной собственности Soft Machines и может лицензироваться подобно ядрам ARM Cortex. Shasta состоит из двух физических и двух виртуальных ядер.
Первые три ступени конвейера знакомы нам по другим архитектурам CPU. Интересное начинается со ступени Threadlet/Formation, здесь присутствуют три ступени, специфичные для VISC – на них формируются виртуальные потоки threadlets, которые затем распределяются по виртуальным ядрам и выполняются на физических ядрах. На планирование и диспетчеризацию как раз выделены 6+1 ступени конвейера. +1 относится к динамическому выделению физических ядер, если активны два потока, то поток с наиболее интенсивными вычислениями получит большую долю ресурсов. Здесь как раз кроется ключевое преимущество архитектуры VISC.
Виртуальные ядра могут конфигурироваться и с помощью программного обеспечения. То есть можно указывать, например, что виртуальное ядро может использовать одно из двух физических ядер. Все это позволяет вносить оптимизации под выполняющиеся приложения. Подобное выделение может выполняться и в реальном времени, но займет порядка 10-12 тактов. Есть и поддержка качества сервиса, то есть если виртуальное ядро получает поток с более высоким приоритетом, то оно получит доступ к большим ресурсам.
Soft Machines – архитектура VISC
Soft Machines для архитектуры VISC использует собственный набор инструкций ISA, но обеспечивается совместимость с существующими наборами инструкций. Пока что официально поддерживается только ARMv8, VISC может интерпретировать и выполнять соответствующий код. Конечно, было бы интересно посмотреть на поддержку x86 ISA, хотя против этого наверняка будет возражать Intel. Но в будущем планируется добавить поддержку других ISA. Ранее подобные переводы инструкций не имели особого успеха. Intel реализовала трансляцию кода в процессорах Itanium, Transmeta тоже поддержала x86 таким же образом, NVIDIA в Denver использовала трансляцию ARM ISA в собственную систему команд.
Soft Machines говорит о слое Translation Layer между VISC и другими ISA, чья задача заключается в обеспечении совместимости. В упомянутых выше реализациях ставилась задача увеличения производительности путем трансляции и оптимизации кода, например, NVIDIA преобразовывала ISA, чтобы раскрыть параллелизм на уровне инструкций для дизайна 7-wide. В случае VISC Translation Layer призван обеспечивать только совместимость с гостевыми ISA. Задачи оптимизации на данном уровне не ставится. Дело в том, что дизайн VISC предусматривает оптимизацию на уровне генерации threadlets, а не на уровне трансляции. Soft Machines указывает избыточную вычислительную нагрузку всего 5%, что намного лучше предыдущих реализаций уровней трансляции. Поэтому будет интересно дождаться поддержки других ISA на архитектуре VISC.
Первые процессоры VISC
Soft Machines готова предложить на рынок первые дизайны. Но кроме представления собственных продуктов у разработки архитектуры VISC есть и другие цели. Инвесторы, те же Samsung Ventures, GlobalFoundries, AMD и Mubadala, хотели бы использовать разработки компании и в своих продуктах.
Упомянутый выше процессор Shasta с двумя виртуальными и физическими ядрами стал первенцем в серии. Soft Machines планирует выпустить две группы продуктов, а именно процессоры и SoC. На дизайне Shasta планируется выпустить процессоры, содержащие 1-2 виртуальных ядра на двух физических, в SMP два процессора обеспечат 2-4 виртуальных ядра (на четырех физических). Процессоры будут 64-битными, тактовая частота ожидается до 2 ГГц, производство будет осуществляться по 16-нм техпроцессу FinFET. Процессоры ожидаются уже в середине 2016 года.
Symmetric Multiprocessing (SMP) может использоваться для совместной работы нескольких чипов. Интерконнект в данном случае работает на скорости более 200 Гбайт/с, но пока поддерживается только один интерфейс, что позволяет связать два чипа. Дизайн с двумя процессорами будет реализован в третьем квартале виде SoC Mojave, которая будет содержать 2-4 виртуальных ядра, а также графику PowerVR, контроллер памяти DDR4, систему управления виртуализацией, контроллер PCIe на восемь линий поколения 3.0, поддержку портов USB, SATA. В 2017 году планируется Shasta+, где количество виртуальных ядер увеличится до четырех на двух физических (до восьми на четырех физических в SMP). Процессор будет изготавливаться по 10-нм техпроцессу. На основе Shasta+ планируется представить SoC под названием Tabernas. В будущем Soft Machines планирует представить Tahoe, содержащий до 8 виртуальных ядер на 4 физических (до 16 виртуальных на 8 физических в SMP), а также соответствующую SoC (Ordos).
Soft Machines – архитектура VISC
Тестов пока нет
Но достаточно теории. Как архитектура VISC покажет себя на практике против существующих процессоров? Здесь информация Soft Machines весьма туманная. На конференции в 2014 году компания один раз показывала функционирующее «железо». Чип производился по 28-нм техпроцессу и работал на 500 МГц. Но поскольку Shasta будет производиться по 16-нм техпроцессу и работать на 2 ГГц, то результаты производительности первого варианта вряд ли интересны. Soft Machines дает оценочную информацию о том, как Shasta будет работать по сравнению с дизайнами Cortex-A72, Apple A9X или Skylake от Intel.
Soft Machines – архитектура VISC
На Anandtech произведен анализ представленных результатов симуляции и высказаны предположения, что они имеют мало отношения к практике. В любом случае, перед нами симуляция.
16-нм чипы FinFET уже выпущены
Можно долго обсуждать результаты симуляции, но гораздо интереснее протестировать готовое решение. Тем более что первые образцы 16-нм чипов уже выпущены. Так что появления результатов настоящих тестов осталось ждать недолго. Пока что образцы существуют в виде кристаллов, которые проходят этап тестирования и проверки.
Целью работы ядра Shasta, изготавливаемого по 16-нм техпроцессу FinFET, является частота 2 ГГц с энергопотреблением 2 Вт. Чтобы процессоры можно было использовать в разных продуктах, Soft Machines планирует диапазон от 0,5 до 5 Вт на ядро. Таким образом, процессоры могут использоваться и в high-end серверах, и в качестве экономичных SoC. Что касается партнеров, то они пока не высказались насчет поддержки в своих продуктах.
Soft Machines очень сильно зависит от партнеров, поскольку в одиночку компания вряд ли сможет выпустить на рынок готовые процессоры. Партнеры нужны не только для инвестиций, но и для полной экосистемы. В качестве целевой сферы применения процессоров часто указывают сетевое оборудование, где уже используются специализированные продукты, такие как процессоры Opteron 1100 на ядрах ARM от AMD, или инициатива Intel для Китая, где процессоры Xeon будут дополняться аппаратной обвязкой для сетевых решений.
В ближайшие 1-2 года мы вряд ли встретим серьезные аппаратные реализации. Для столь амбициозных задач архитектура VISC находится на слишком раннем этапе разработки. Но потенциал у архитектуры есть, поскольку возможность совместного использования ресурсов множества «легких» ядер для выполнения нескольких потоков кажется весьма привлекательной. То есть все аппаратные ресурсы будут привлечены для выполнения задачи, независимо от ее характера. Сегодня многие 4- и 8-ядерные дизайны используют экономичные ядра CPU вместе с быстрыми ядрами. В зависимости от приложений, используются определенные ядра. NVIDIA разработала вообще специализированные ядра Denver, которые используются в той же Drive PX 2. Их архитектура с шириной 7-wide особенно удобна для целевых сценариев. Возможно, в будущем всем процессорным архитектурам придется использовать технологии, подобные VISC.
Но архитектура VISC будет оставаться «бумажной», пока мы не увидим решений от одного или нескольких производителей, либо полной экосистемы. Возможно, VISC не найдет применения сама по себе, но наработки будут использованы в грядущих архитектурах CPU.